Socket Options এবং Control হলো Socket-এর বৈশিষ্ট্য এবং আচরণ কাস্টমাইজ করার পদ্ধতি, যা Socket API ব্যবহার করে করা হয়। এগুলো নেটওয়ার্ক প্রোগ্রামিংয়ে Socket-এর কার্যকারিতা এবং কর্মক্ষমতা উন্নত করতে সহায়ক। setsockopt()
এবং getsockopt()
ফাংশনের মাধ্যমে Socket-এর বিভিন্ন অপশন সেট এবং নিয়ন্ত্রণ করা যায়।
setsockopt()
:
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
sockfd
: Socket Descriptor।level
: অপশন কোন লেভেলে অ্যাপ্লিকেবল (যেমন, SOL_SOCKET
, IPPROTO_TCP
)।optname
: অপশনের নাম (যেমন, SO_REUSEADDR
, SO_RCVBUF
)।optval
: অপশন ভ্যালু।optlen
: অপশন ভ্যালুর দৈর্ঘ্য।getsockopt()
:
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
setsockopt()
-এর মতোই, তবে এটি optval
এবং optlen
এর মাধ্যমে অপশন ভ্যালু ফেরত দেয়।SO_REUSEADDR
:
SO_RCVBUF
এবং SO_SNDBUF
:
SO_KEEPALIVE
:
TCP_NODELAY
:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8080
int main() {
int server_fd;
struct sockaddr_in server_addr;
// Server socket তৈরি করা
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// SO_REUSEADDR অপশন সেট করা
int opt = 1;
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) < 0) {
perror("setsockopt failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// Server address সেটআপ করা
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
// Binding করা
if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Bind failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// Listening শুরু করা
if (listen(server_fd, 3) < 0) {
perror("Listen failed");
close(server_fd);
exit(EXIT_FAILURE);
}
printf("Server is running with SO_REUSEADDR option enabled.\n");
close(server_fd);
return 0;
}
SO_REUSEADDR
অপশন ব্যবহার করে সার্ভার পুনরায় চালানোর সময় আগের সংযোগগুলোর বাধা দূর করা হয়েছে।SO_LINGER
:
SO_BROADCAST
:
SO_OOBINLINE
:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8080
int main() {
int server_fd;
struct sockaddr_in server_addr;
// Server socket তৈরি করা
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// Send buffer size সেট করা
int send_buf_size = 16384;
if (setsockopt(server_fd, SOL_SOCKET, SO_SNDBUF, &send_buf_size, sizeof(send_buf_size)) < 0) {
perror("setsockopt failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// Receive buffer size সেট করা
int recv_buf_size = 16384;
if (setsockopt(server_fd, SOL_SOCKET, SO_RCVBUF, &recv_buf_size, sizeof(recv_buf_size)) < 0) {
perror("setsockopt failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// Server address সেটআপ করা
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
// Binding করা
if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Bind failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// Listening শুরু করা
if (listen(server_fd, 3) < 0) {
perror("Listen failed");
close(server_fd);
exit(EXIT_FAILURE);
}
printf("Server is running with custom buffer sizes.\n");
close(server_fd);
return 0;
}
setsockopt()
এবং getsockopt()
ফাংশন দুটি Socket Programming-এর ক্ষেত্রে অপরিহার্য, কারণ এগুলো Socket-এর বৈশিষ্ট্য এবং আচরণ নিয়ন্ত্রণ করার ক্ষমতা প্রদান করে। এগুলোর মাধ্যমে Socket-এর বিভিন্ন অপশন কনফিগার এবং যাচাই করা যায়, যা নেটওয়ার্ক অ্যাপ্লিকেশন এবং সার্ভারের কার্যকারিতা এবং কর্মক্ষমতা উন্নত করতে সহায়ক। নিচে setsockopt()
এবং getsockopt()
এর প্রয়োজনীয়তা নিয়ে বিস্তারিত আলোচনা করা হলো:
setsockopt()
এবং getsockopt()
এর প্রয়োজনীয়তাSocket Configuration এবং Customization:
setsockopt()
ফাংশন ব্যবহার করা হয়। এটি Socket-এর বিভিন্ন অপশন (যেমন, টাইমআউট, Buffer Size, Keep-alive) কাস্টমাইজ করতে সহায়ক।getsockopt()
ব্যবহার করে Socket-এর বর্তমান কনফিগারেশন বা অপশন ভ্যালু পড়া যায়, যা ডায়গনস্টিক বা কনফিগারেশন যাচাই করতে সহায়ক।Performance Optimization:
setsockopt()
এর মাধ্যমে Send এবং Receive Buffer Size নির্ধারণ করা যায়। Buffer Size বাড়ানো বা কমানোর মাধ্যমে ডেটা ট্রান্সমিশনের সময় কর্মক্ষমতা উন্নত করা যায়।SO_RCVBUF
এবং SO_SNDBUF
অপশন ব্যবহার করে Receive এবং Send Buffer Size কাস্টমাইজ করা যায়, যা বড় ডেটা বা ফাইল ট্রান্সফারের ক্ষেত্রে পারফরম্যান্স বাড়াতে সহায়ক।Socket Reuse এবং Port Binding:
SO_REUSEADDR
এবং SO_REUSEPORT
অপশন ব্যবহার করে একটি Socket পুনরায় ব্যবহার করা যায়।setsockopt()
ব্যবহার করে এই অপশনগুলো সক্রিয় করা হয়, যা সার্ভারকে Address বা Port পুনরায় ব্যবহার করতে সক্ষম করে।Timeout Configuration:
setsockopt()
ব্যবহৃত হয়।SO_RCVTIMEO
এবং SO_SNDTIMEO
অপশন ব্যবহার করে Receive এবং Send অপারেশনের জন্য টাইমআউট নির্ধারণ করা যায়। এটি দীর্ঘমেয়াদী সংযোগের ক্ষেত্রে বিশেষ করে গুরুত্বপূর্ণ।TCP Keep-alive এবং Connection Stability:
SO_KEEPALIVE
অপশন ব্যবহার করা হয়। এটি সক্রিয় করলে TCP সংযোগ জীবিত (alive) কিনা তা যাচাই করার জন্য Keep-alive প্যাকেট পাঠানো হয়।Security এবং Access Control:
setsockopt()
ব্যবহার করা হয়। উদাহরণস্বরূপ, Multicast Socket-এ TTL (Time-to-Live) নির্ধারণ করা যায় এবং অ্যাক্সেস নিয়ন্ত্রণ করা যায়।setsockopt()
এবং getsockopt()
এর ব্যবহারিক উদাহরণsetsockopt()
উদাহরণ)#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8080
int main() {
int server_fd;
struct sockaddr_in server_addr;
// Server socket তৈরি করা
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// SO_REUSEADDR অপশন সেট করা
int opt = 1;
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) < 0) {
perror("setsockopt failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// Server address সেটআপ করা
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
// Binding করা
if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Bind failed");
close(server_fd);
exit(EXIT_FAILURE);
}
printf("Server is running with SO_REUSEADDR option enabled.\n");
close(server_fd);
return 0;
}
SO_REUSEADDR
অপশন ব্যবহার করা হয়েছে, যাতে সার্ভার পুনরায় চালানোর সময় আগের সংযোগগুলো Address বা Port পুনরায় ব্যবহার করতে পারে।getsockopt()
উদাহরণ)#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8080
int main() {
int server_fd;
struct sockaddr_in server_addr;
int recv_buf_size;
socklen_t optlen = sizeof(recv_buf_size);
// Server socket তৈরি করা
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// Server address সেটআপ করা
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
// Binding করা
if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Bind failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// Receive buffer size পড়া
if (getsockopt(server_fd, SOL_SOCKET, SO_RCVBUF, &recv_buf_size, &optlen) < 0) {
perror("getsockopt failed");
close(server_fd);
exit(EXIT_FAILURE);
}
printf("Receive buffer size: %d bytes\n", recv_buf_size);
close(server_fd);
return 0;
}
getsockopt()
ব্যবহার করে Receive Buffer Size পড়া হয়েছে, যা নেটওয়ার্ক ডায়াগনস্টিক এবং Socket এর কনফিগারেশন যাচাই করতে সহায়ক।Common Socket Options হলো Socket-এর বিভিন্ন বৈশিষ্ট্য, যা setsockopt()
এবং getsockopt()
ফাংশন ব্যবহার করে কনফিগার করা যায়। এগুলো Socket-এর আচরণ কাস্টমাইজ করতে এবং নেটওয়ার্ক অ্যাপ্লিকেশনগুলোর কর্মক্ষমতা এবং স্থায়িত্ব নিশ্চিত করতে সহায়ক। এখানে SO_REUSEADDR
, SO_KEEPALIVE
, এবং SO_LINGER
এই তিনটি গুরুত্বপূর্ণ অপশন নিয়ে আলোচনা করা হলো।
SO_REUSEADDR
SO_REUSEADDR
অপশন Socket-কে পুনরায় ব্যবহার করতে দেয়, বিশেষত যখন একটি Socket দ্রুত নতুনভাবে Binding করতে হয়। এটি সাধারণত সার্ভার প্রোগ্রামিংয়ে ব্যবহৃত হয়, যেখানে পূর্ববর্তী সংযোগ থেকে Address বা Port ব্যস্ত থাকলে এটি মুক্ত করে নতুন সংযোগের জন্য ব্যবহৃত হতে দেয়।
SO_REUSEADDR
সেট করে Address পুনরায় ব্যবহার করা যায়।#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8080
int main() {
int server_fd;
struct sockaddr_in server_addr;
// Server socket তৈরি করা
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// SO_REUSEADDR অপশন সেট করা
int opt = 1;
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) < 0) {
perror("setsockopt failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// Server address সেটআপ করা
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
// Binding করা
if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Bind failed");
close(server_fd);
exit(EXIT_FAILURE);
}
printf("Server is running with SO_REUSEADDR option enabled.\n");
close(server_fd);
return 0;
}
SO_KEEPALIVE
SO_KEEPALIVE
অপশন সক্রিয় করলে TCP সংযোগগুলোর জন্য Keep-alive প্যাকেট পাঠানো হয়, যা সংযোগ জীবিত (alive) রয়েছে কিনা তা যাচাই করতে সহায়ক। এটি দীর্ঘমেয়াদী সংযোগগুলোর ক্ষেত্রে ব্যবহৃত হয়, যেখানে সংযোগ দীর্ঘ সময় ধরে সক্রিয় রাখতে হয়।
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8080
int main() {
int server_fd;
struct sockaddr_in server_addr;
// Server socket তৈরি করা
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// SO_KEEPALIVE অপশন সেট করা
int opt = 1;
if (setsockopt(server_fd, SOL_SOCKET, SO_KEEPALIVE, &opt, sizeof(opt)) < 0) {
perror("setsockopt failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// Server address সেটআপ করা
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
// Binding করা
if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Bind failed");
close(server_fd);
exit(EXIT_FAILURE);
}
printf("Server is running with SO_KEEPALIVE option enabled.\n");
close(server_fd);
return 0;
}
SO_LINGER
SO_LINGER
অপশন ব্যবহার করে Socket বন্ধ করার সময় কিভাবে আচরণ করবে তা নির্ধারণ করা যায়। এটি Linger (অপেক্ষার) সময় নির্ধারণ করে, অর্থাৎ Socket বন্ধ হওয়ার সময় কতক্ষণ অপেক্ষা করবে, যাতে সব ডেটা সঠিকভাবে পাঠানো যায়।
0
করা হয়, তবে ডেটা পেন্ডিং থাকলেও Socket অবিলম্বে বন্ধ হয়ে যায়।#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8080
int main() {
int server_fd;
struct sockaddr_in server_addr;
// Server socket তৈরি করা
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// SO_LINGER অপশন সেট করা
struct linger linger_opt;
linger_opt.l_onoff = 1; // Linger সক্রিয় করা
linger_opt.l_linger = 10; // 10 সেকেন্ড পর্যন্ত অপেক্ষা
if (setsockopt(server_fd, SOL_SOCKET, SO_LINGER, &linger_opt, sizeof(linger_opt)) < 0) {
perror("setsockopt failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// Server address সেটআপ করা
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(PORT);
// Binding করা
if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Bind failed");
close(server_fd);
exit(EXIT_FAILURE);
}
printf("Server is running with SO_LINGER option enabled.\n");
close(server_fd);
return 0;
}
Socket Buffers হলো নেটওয়ার্ক Socket-এর জন্য ব্যবহৃত মেমরি স্পেস, যা ডেটা পাঠানোর (send) এবং গ্রহণের (receive) সময় ব্যবহৃত হয়। এগুলো ডেটা ট্রান্সমিশনের কর্মক্ষমতা উন্নত করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। Socket Buffers-এর সাইজ এবং ব্যবস্থাপনা নিয়ন্ত্রণ করে নেটওয়ার্ক অ্যাপ্লিকেশনগুলোর কর্মক্ষমতা এবং কার্যকারিতা বৃদ্ধি করা যায়। নিচে Socket Buffers এবং তাদের নিয়ন্ত্রণ নিয়ে বিস্তারিত আলোচনা করা হলো:
Send Buffer:
SO_SNDBUF
অপশন ব্যবহার করে Send Buffer-এর সাইজ নিয়ন্ত্রণ করা যায়।Receive Buffer:
SO_RCVBUF
অপশন ব্যবহার করে Receive Buffer-এর সাইজ নিয়ন্ত্রণ করা যায়।setsockopt()
এবং getsockopt()
ব্যবহারSocket Buffers-এর সাইজ সেট এবং চেক করার জন্য setsockopt()
এবং getsockopt()
ফাংশন ব্যবহার করা হয়।
setsockopt()
:SO_SNDBUF
এবং SO_RCVBUF
অপশন ব্যবহার করে যথাক্রমে Send এবং Receive Buffer-এর সাইজ নির্ধারণ করা হয়।getsockopt()
:c
Copy code
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8080
int main() {
int server_fd;
struct sockaddr_in server_addr;
int send_buf_size, recv_buf_size;
socklen_t optlen;
// Server socket তৈরি করা
server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// Send Buffer Size সেট করা
send_buf_size = 32768; // 32 KB
if (setsockopt(server_fd, SOL_SOCKET, SO_SNDBUF, &send_buf_size, sizeof(send_buf_size)) < 0) {
perror("setsockopt for SO_SNDBUF failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// Receive Buffer Size সেট করা
recv_buf_size = 32768; // 32 KB
if (setsockopt(server_fd, SOL_SOCKET, SO_RCVBUF, &recv_buf_size, sizeof(recv_buf_size)) < 0) {
perror("setsockopt for SO_RCVBUF failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// Buffer Size যাচাই করা
optlen = sizeof(send_buf_size);
getsockopt(server_fd, SOL_SOCKET, SO_SNDBUF, &send_buf_size, &optlen);
getsockopt(server_fd, SOL_SOCKET, SO_RCVBUF, &recv_buf_size, &optlen);
printf("Send Buffer Size: %d bytes\n", send_buf_size);
printf("Receive Buffer Size: %d bytes\n", recv_buf_size);
close(server_fd);
return 0;
}
ডেটা ট্রান্সমিশন পারফরম্যান্স বাড়ানো:
ডেটা লস এড়ানো:
নেটওয়ার্ক ল্যাটেন্সি এবং ব্যান্ডউইথ ব্যবস্থাপনা:
Buffer Size-এর সীমা:
/proc/sys/net/core/wmem_max
এবং /proc/sys/net/core/rmem_max
ফাইলগুলো পরিবর্তন করে Buffer সাইজ বাড়ানো যায়।TCP Window Size:
UDP এবং TCP সংযোগের Buffer Management:
Multicast এবং Broadcast হলো নেটওয়ার্কিং কৌশল, যা একাধিক ডিভাইসে একসাথে ডেটা পাঠাতে ব্যবহৃত হয়। নেটওয়ার্ক প্রোগ্রামিংয়ে, setsockopt()
এবং getsockopt()
ফাংশন ব্যবহার করে Multicast এবং Broadcast Options কনফিগার করে বিভিন্ন ডিভাইসে ডেটা ট্রান্সমিশন করা যায়। এগুলোর মাধ্যমে একাধিক সংযোগ দ্রুত এবং কার্যকরভাবে পরিচালনা করা যায়, বিশেষত যেখানে একাধিক ক্লায়েন্টকে একই ডেটা একসাথে পাঠাতে হয়।
Multicast হলো এমন একটি প্রক্রিয়া, যেখানে একটি ডেটা প্যাকেট একই সাথে একাধিক নির্দিষ্ট ডিভাইসে (Multicast Group) পাঠানো হয়। এটি সাধারণত UDP প্রোটোকল ব্যবহার করে এবং ডিভাইসগুলোতে একই ডেটা স্ট্রিম পৌঁছাতে সক্ষম। Multicast ব্যবহৃত হয় লাইভ ভিডিও স্ট্রিমিং, রিয়েল-টাইম ডেটা শেয়ারিং, এবং লাইভ গেমিংয়ের মতো অ্যাপ্লিকেশনগুলোর জন্য।
IP_MULTICAST_TTL
:
1
, যা একই নেটওয়ার্কে (local subnet) Multicast সীমাবদ্ধ রাখে। এটি বাড়িয়ে বিভিন্ন নেটওয়ার্কে বা ইন্টারনেটে Multicast করা যায়।IP_ADD_MEMBERSHIP
:
IP_DROP_MEMBERSHIP
:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/socket.h>
#define PORT 12345
#define GROUP "239.0.0.1" // Multicast Address
int main() {
int sockfd;
struct sockaddr_in multicast_addr;
char message[] = "Hello Multicast!";
int ttl = 5; // TTL মান সেট করা
// UDP Socket তৈরি করা
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// Multicast TTL সেট করা
if (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)) < 0) {
perror("Setting TTL failed");
close(sockfd);
exit(EXIT_FAILURE);
}
// Multicast Address এবং Port সেট করা
memset(&multicast_addr, 0, sizeof(multicast_addr));
multicast_addr.sin_family = AF_INET;
multicast_addr.sin_addr.s_addr = inet_addr(GROUP);
multicast_addr.sin_port = htons(PORT);
// Multicast মেসেজ পাঠানো
if (sendto(sockfd, message, sizeof(message), 0, (struct sockaddr*)&multicast_addr, sizeof(multicast_addr)) < 0) {
perror("Sendto failed");
close(sockfd);
exit(EXIT_FAILURE);
}
printf("Multicast message sent!\n");
close(sockfd);
return 0;
}
IP_MULTICAST_TTL
সেট করে TTL মান 5
নির্ধারণ করা হয়েছে।Broadcast হলো এমন একটি প্রক্রিয়া, যেখানে একটি ডেটা প্যাকেট নেটওয়ার্কে সকল ডিভাইসে পাঠানো হয়। এটি সাধারণত UDP প্রোটোকল ব্যবহার করে, এবং একই নেটওয়ার্কে থাকা সব ডিভাইসকে (subnet) একই সাথে ডেটা পাঠায়। Broadcast সাধারণত ডিসকভারি প্রোটোকল বা নেটওয়ার্কের ডিভাইসগুলোকে মেসেজ পাঠাতে ব্যবহৃত হয়।
SO_BROADCAST
:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/socket.h>
#define PORT 12345
#define BROADCAST_IP "255.255.255.255" // Broadcast Address
int main() {
int sockfd;
struct sockaddr_in broadcast_addr;
char message[] = "Hello Broadcast!";
int opt = 1;
// UDP Socket তৈরি করা
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// SO_BROADCAST অপশন সেট করা
if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &opt, sizeof(opt)) < 0) {
perror("Setting SO_BROADCAST failed");
close(sockfd);
exit(EXIT_FAILURE);
}
// Broadcast Address এবং Port সেট করা
memset(&broadcast_addr, 0, sizeof(broadcast_addr));
broadcast_addr.sin_family = AF_INET;
broadcast_addr.sin_addr.s_addr = inet_addr(BROADCAST_IP);
broadcast_addr.sin_port = htons(PORT);
// Broadcast মেসেজ পাঠানো
if (sendto(sockfd, message, sizeof(message), 0, (struct sockaddr*)&broadcast_addr, sizeof(broadcast_addr)) < 0) {
perror("Sendto failed");
close(sockfd);
exit(EXIT_FAILURE);
}
printf("Broadcast message sent!\n");
close(sockfd);
return 0;
}
255.255.255.255
ব্যবহার করে সমস্ত ডিভাইসে মেসেজ পাঠায়। SO_BROADCAST
অপশন সক্রিয় করে এটি সম্ভব করা হয়েছে।বৈশিষ্ট্য | Multicast | Broadcast |
---|---|---|
ডেটা ট্রান্সমিশন পদ্ধতি | নির্দিষ্ট Multicast Group-এ ডেটা পাঠানো হয় | একই নেটওয়ার্কে থাকা সব ডিভাইসে ডেটা পাঠানো হয় |
ব্যবহার | লাইভ স্ট্রিমিং, রিয়েল-টাইম ডেটা শেয়ারিং | নেটওয়ার্ক ডিসকভারি, আলার্ম সিস্টেম |
কনফিগারেশন | Multicast Address ব্যবহার করে | Broadcast Address (255.255.255.255) |
প্রোটোকল | UDP (সাধারণত) | UDP (সাধারণত) |
common.read_more